﻿using BarManager.Core.DomainModel;
using BarManager.Core.DomainService;
using BarManager.Core.Entity;
using System.Collections.Generic;
using System.Linq;

namespace BarManager.Infrastructure.Data.Repository
{
    public class ZonaRepository : BaseRepository<Zona>, IZonaRepository
    {
        private IMesaRepository MesaRepository { get; set; }

        public ZonaRepository(IObjectContext context, IMesaRepository mesaRepository)
            : base(context)
        {
            this.MesaRepository = mesaRepository;
        }
       
        public override void Update(Zona entity)
        {
            //- Eliminamos mesas de la base
            IEnumerable<Mesa> mesas = MesaRepository.Find(x => x.ZonaId == entity.Id);

            //- Si existen diferencias elimina las mesas en BD e inserta nuevas
            if (mesas != null && mesas.Count() != entity.Mesas.Count())
            {
                //- Elimimanmos mesas en base
                foreach (var item in mesas) MesaRepository.Delete(item);

                //- Insertamos las nuevas mesas 
                foreach (var item in entity.Mesas)
                {
                    Mesa mesa = new Mesa
                    {
                        Libre = item.Libre,
                        Nombre = item.Nombre,
                        ZonaId = entity.Id
                    };
                    MesaRepository.Add(mesa);
                }
            }

            //- Eliminamos relacion con mesas
            entity.Mesas = null;

            //- Insertamos Cabecera
            base.Update(entity);
        }
    }
}
